PartiQL CLI(REPL)からDynamoDBを操作できるようになりました
PartiQL CLI(REPR)がDyanamoDBに対応
PartiQLはSQL互換のクエリ言語で、DynamoDB、S3 Select、QLDBなど、AWSの様々なデータストアにクエリアクセスできます。
DynamoDBに PartiQLでアクセスする場合、以下の選択肢がありました。
- DynamoDB コンソール
- NoSQL Workbench
- AWS Command Line Interface (AWS CLI)
- DynamoDB APIs
PartiQLのリファレンス実装がOSSで公開されており、公開当初よりREPL機能も備わっているものの、PartiQL REPLからは外部のデータストアへアクセスできませんでした。
DynamoDBにSQLでアクセスするDQLのように、PartiQL REPLからもDynamoDBにアクセスできると便利だなぁと思っていたところ、そのものずばりの機能が実装されました。
PartiQL> query_ddb('SELECT * FROM test WHERE id = 1'); ===' [ { 'name': 'john', 'id': 1 } ] --- OK!
やってみた
本機能はmainブランチにマージされたばかりです。 最新リリースの v0.6 には取り込まれていないため、mainブランチのコードベースを利用して動作確認します。
AWSクレデンシャルの設定
AWSリソースにアクセスするため、次のドキュメントを参考にAWSのクレデンシャルを設定します。
Working with AWS Credentials - AWS SDK for Java
$HOME/.aws/
に設定、EC2のインスタンスプロファイル、環境変数など、設定方法は問いません。
REPLの起動
PartiQLのリファレンス実装はKotlinで実装されているため、JavaやGradleなどの環境は事前に整えておいてください。
ソースコードを取得し、ビルドして、CLIを起動するだけです。
$ git clone https://github.com/partiql/partiql-lang-kotlin.git $ cd partiql-lang-kotlin $ ./cli/shell.sh ... Welcome to the PartiQL REPL! Typing mode: LEGACY Using version: 0.6.1-SNAPSHOT-3715b39 PartiQL>
$ ./cli/shell.sh
の代わりに、以下のようにしても同じです。
$ ./gradlew :cli:install $ ./cli/build/install/partiql-cli/bin/partiql
DynamoDBにPartiQLでアクセス
DynamoDBにアクセスするには、PartiQLの操作対象のデータソースがDynamoDBとなるよう、PartiQL文をquery_ddb
関数の引数で渡します。
PartiQL> query_ddb('SELECT * FROM test WHERE id = 1'); ===' [ { 'name': 'john', 'id': 1 } ] --- OK!
PartiQL文にシングルクオートが含まれる場合、シングルクオートを連続させます。
PartiQL> query_ddb('INSERT INTO test VALUE({''id'':2, ''name'':''kate''})'); ===' [] --- OK!
DynamoDBへのSELECT結果を、サブクエリ的に使うこともできます。
PartiQL> SELECT * | FROM query_ddb('SELECT * FROM test') | WHERE id IN [1,3]; ===' << { 'name': 'lucy', 'id': 3 }, { 'name': 'john', 'id': 1 } >> --- OK!
この例では、SELECT文にWHERE句が含まれないため、フルテーブルスキャンが発生しています。
他のデータストアも対応させたい
他のデータストアにも対応さてたい場合、extensions/test/org/partiql/extensions/cli/functions/QueryDDBTest.kt のようなエクステンション・ライブラリ(薄いラッパー)を追加します。
この機能が取り込まれた PR #635 を眺めると、具体的な改修内容のイメージが湧きやすいと思います。
最後に
外部データストアに対応していなかったPartiQL REPL(シェル)がDynamoDBにアクセスできるようになりました。
コマンドラインからDynamoDBを操作したい人、DQLを使ってSQL操作をしている人にとっては、要チェックのアップデートです。
慣れ親しんだSQLインターフェースは便利ではあるものの、アクセスしているデータストアはRDBではなくDynamoDBです。 スキャン範囲に応じたIO課金が発生するため、SELECT文が意図しないフルテーブルスキャンとならないよう、ご注意ください。 IAMポリシーレベルでフルスキャンを防ぐこともできます。
Kotlin PartiQL実装にエクステンションを記述することで、他のデータストアにもかんたんに対応できるため、PartiQL REPLがサポートするデータストアは増えていきそうです。
今後のアップデートに期待です。